// 导入云对象
const friend = uniCloud.importObject('friend',{customUI:true});
const linli = uniCloud.importObject('linliChat',{customUI:true});
import store from '../store';

// 1. 定义一个全局的缓存对象，用于存储用户信息
// 键: targetId, 值: 用户信息对象
const userInfoCache = {};

/**
 * 获取好友/用户信息（带缓存，避免重复查询）
 * @param {string} targetId - 目标用户ID
 * @returns {Promise<Object>} 用户信息对象
 */
export default async function getFriendUserInfo(targetId,currentUserId,reload=false) {

	try {
	
	 if (currentUserId === undefined) {
	        currentUserId = store.state.msg.user?.userId; // <-- 修改这里
	    }


  // 2. 优先检查缓存
  if (userInfoCache[targetId]&&!reload) {
    // 直接返回缓存的深拷贝，防止外部修改缓存数据
    return JSON.parse(JSON.stringify(userInfoCache[targetId]));
  }
   
  // 参数校验
  if (!targetId || typeof targetId !== 'string') {
	 
    console.error('getFriendUserInfo：targetId 必须是有效字符串', );
	

    return { nicName: '匿名', nicPic: '', userId: targetId || '' };
	
  }

  let userInfo;

	
  
    // 优先查好友列表
    if (currentUserId) {
	
      const params = { userId: currentUserId, targetId };
      const friendRes = await friend.getFriendList(params);
	

	
     if (friendRes?.success && Array.isArray(friendRes.data)) {
        const targetFriend = friendRes.data.find(item => 
          item.friendUserId === targetId || item.userId === targetId
        );
        if (targetFriend) {
          userInfo = {
            nicName: targetFriend.remarkName || targetFriend.friendDetail?.nicName || '未命名',
            nicPic: targetFriend.friendDetail?.avatar || targetFriend.friendDetail?.nicPic?.url || '',
            userId: targetId
          };
        }
      }
    }

    // 如果好友列表中未找到，则查询通用用户信息
    if (!userInfo) {

      userInfo = await getOtherInfo(targetId);	
	
    }

    // 3. 将查询结果存入缓存
    userInfoCache[targetId] = userInfo;


    return userInfo;

  } catch (error) {
	    console.error(`获取用户 ${targetId} 信息失败：`, error);
    // 即使出错，也可以将一个错误状态存入缓存，避免重复尝试
    userInfoCache[targetId] = { nicName: '匿名', nicPic: '', userId: targetId };
    return userInfoCache[targetId];
  }
}

/**
 * 备用：查询通用用户信息
 * @param {string} id - 目标用户ID
 * @returns {Promise<Object>} 用户信息对象
 */
async function getOtherInfo(id) {
  try {
    const userRes = await linli.getUserInfo(id, { nicName: true, nicPic: true });


    if (userRes?.code  && userRes?.data) {
      return {
        userId: id,
        nicName: userRes.data.nicName || '未知联系人',
        nicPic: userRes.data.nicPic?.url||''
      };
    }

    return { userId: id, nicName: '未知联系人', nicPic: '' };

  } catch (e) {
    console.error(`查询用户 ${id} 信息失败：`, e);
    return { userId: id, nicName: '未知联系人', nicPic: '' };
  }
}

/**
 * （可选）清除用户信息缓存
 * @param {string} [targetId] - 可选，指定要清除缓存的用户ID。如果不提供，则清除所有缓存。
 */
export function clearUserInfoCache(targetId) {
  if (targetId) {
    delete userInfoCache[targetId];
  } else {
    Object.keys(userInfoCache).forEach(key => delete userInfoCache[key]);

  }
}